const api = require('../../utils/api.js');        // ✅ 使用统一的API接口
const storage = require('../../utils/storage.js');
const app = getApp();

Page({
  data: {
    statusBarHeight: 0,
    // 认证信息（从用户extraData获取）
    verifyInfo: {
      verified: false,      // 是否已认证
      status: '未认证',     // 状态描述
      realName: '',         // 真实姓名
      idCard: '',           // 脱敏身份证号
      authTime: ''          // 认证时间
    },
    // 表单数据
    formData: {
      idType: '居民身份证',
      realName: '',
      idNumber: ''
    },
    // 是否正在提交
    isSubmitting: false
  },

  onLoad() {
    const windowInfo = wx.getWindowInfo();
    this.setData({
      statusBarHeight: windowInfo.statusBarHeight
    });

    // 🔥 检查登录状态
    this.checkLoginStatus();
  },

  onShow() {
    // 🔔 自动初始化通知组件
    const app = getApp();
    app.autoInitNotification();
    
    // 🔥 每次显示页面时检查登录状态
    this.checkLoginStatus();
  },

  // 🔥 检查登录状态（带弹窗提示）
  checkLoginStatus() {
    console.log('🔐 检查登录状态...');
    
    // 使用统一的storage工具类获取用户信息
    const userInfo = storage.getUserInfo();
    
    if (!userInfo || !userInfo.userid) {
      console.log('❌ 用户未登录，跳转到登录页');
      
      wx.showModal({
        title: '需要登录',
        content: '请先登录后再进行实名认证',
        confirmText: '去登录',
        cancelText: '返回',
        success: (res) => {
          if (res.confirm) {
            // 跳转到登录页
            wx.navigateTo({
              url: '/pages/login/index'
            });
          } else {
            // 返回上一页
            wx.navigateBack({
              delta: 1,
              fail: () => {
                // 如果返回失败，跳转到首页
                wx.switchTab({
                  url: '/pages/main/index'
                });
              }
            });
          }
        }
      });
      
      return false;
    }
    
    console.log('✅ 用户已登录:', userInfo.userid);
    
    // 加载认证信息
    this.loadVerifyInfo();
    
    return true;
  },

  // 🔥 静默检查登录状态（不弹窗）
  isUserLoggedIn() {
    const userInfo = storage.getUserInfo();
    return !!(userInfo && userInfo.userid);
  },

  // 📝 加载认证信息（从本地用户数据读取）
  loadVerifyInfo() {
    try {
      console.log('🔍 开始加载实名认证信息...');
      
      // 🔥 使用统一的storage工具类获取用户信息
      const userInfo = storage.getUserInfo();
      
      if (!userInfo || !userInfo.extraData) {
        console.log('❌ 用户信息或extraData不存在');
        this.setData({
          verifyInfo: {
            verified: false,
            status: '未认证',
            realName: '',
            idCard: '',
            authTime: ''
          }
        });
        return;
      }

      // 获取实名认证信息
      const realNameAuth = userInfo.extraData.realNameAuth;
      
      if (!realNameAuth) {
        console.log('📝 暂无实名认证数据');
        this.setData({
          verifyInfo: {
            verified: false,
            status: '未认证',
            realName: '',
            idCard: '',
            authTime: ''
          }
        });
        return;
      }

      // 解析认证信息
      const verified = realNameAuth.verified === true;
      const statusText = verified ? '已认证' : (realNameAuth.status === 1 ? '认证中' : '未认证');
      
      console.log('✅ 实名认证信息加载成功:', {
        verified,
        statusText,
        name: realNameAuth.name,
        idCard: realNameAuth.idCardNo
      });

      this.setData({
        verifyInfo: {
          verified: verified,
          status: statusText,
          realName: realNameAuth.name || '',
          idCard: realNameAuth.idCardNo || '',
          authTime: this.formatAuthTime(realNameAuth.authTime || '')
        }
      });

    } catch (e) {
      console.error('💥 加载认证信息异常:', e);
      wx.showToast({
        title: '加载认证信息失败',
        icon: 'none'
      });
    }
  },

  // 📝 格式化认证时间
  formatAuthTime(authTime) {
    if (!authTime) return '';
    
    try {
      // 解析ISO时间格式：2025-07-16T23:40:01.643217
      const date = new Date(authTime);
      const year = date.getFullYear();
      const month = String(date.getMonth() + 1).padStart(2, '0');
      const day = String(date.getDate()).padStart(2, '0');
      const hour = String(date.getHours()).padStart(2, '0');
      const minute = String(date.getMinutes()).padStart(2, '0');
      
      return `${year}-${month}-${day} ${hour}:${minute}`;
    } catch (e) {
      console.error('❌ 时间格式化失败:', e);
      return authTime;
    }
  },

  // 返回
  goBack() {
    wx.navigateBack();
  },

  // 输入真实姓名
  onNameInput(e) {
    this.setData({
      'formData.realName': e.detail.value
    });
  },

  // 输入证件号码
  onIdNumberInput(e) {
    this.setData({
      'formData.idNumber': e.detail.value
    });
  },

  // 🔥 提交实名认证（对接真实API）
  async submitVerify() {
    // 🔥 提交前静默检查登录状态
    if (!this.isUserLoggedIn()) {
      console.log('❌ 用户未登录，停止提交');
      wx.showToast({
        title: '请先登录',
        icon: 'none',
        duration: 2000
      });
      setTimeout(() => {
        wx.navigateTo({
          url: '/pages/login/index'
        });
      }, 2000);
      return;
    }

    const { realName, idNumber } = this.data.formData;

    // 验证真实姓名
    if (!realName || !realName.trim()) {
      wx.showToast({
        title: '请输入真实姓名',
        icon: 'none'
      });
      return;
    }

    // 验证身份证号码
    if (!idNumber || !idNumber.trim()) {
      wx.showToast({
        title: '请输入身份证号码',
        icon: 'none'
      });
      return;
    }

    // 简单验证身份证号码格式（18位）
    const idCardReg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
    if (!idCardReg.test(idNumber)) {
      wx.showToast({
        title: '请输入正确的身份证号码',
        icon: 'none'
      });
      return;
    }

    // 防止重复提交
    if (this.data.isSubmitting) {
      console.log('⚠️ 正在提交中，请勿重复提交');
      return;
    }

    try {
      this.setData({ isSubmitting: true });
      
      wx.showLoading({
        title: '提交中...',
        mask: true
      });

      console.log('🚀 开始提交实名认证（使用统一API接口）');

      // 🔥 使用统一的storage工具类获取用户信息
      const userInfo = storage.getUserInfo();
      if (!userInfo || !userInfo.userid) {
        throw new Error('用户信息不存在，请重新登录');
      }

      console.log('📝 准备调用实名认证API');
      console.log('👤 用户ID:', userInfo.userid);
      console.log('📝 姓名:', realName.trim());
      console.log('🆔 身份证:', '***************'); // 隐藏身份证号

      // ✅ 调用统一的实名认证API接口（与Flutter保持一致）
      const response = await api.realnameAuth(
        userInfo.userid,      // 🔥 用户ID（会自动转为数字类型）
        realName.trim(),      // 🔥 真实姓名
        idNumber.trim()       // 🔥 身份证号
      );

      wx.hideLoading();

      // 处理响应
      if (response.status === 'success') {
        console.log('🎉 实名认证提交成功');

        // 更新本地用户信息的extraData
        const updatedUserInfo = {
          ...userInfo,
          extraData: {
            ...userInfo.extraData,
            realNameAuth: {
              verified: response.data?.verified || false,
              name: realName.trim(),
              idCardNo: response.data?.idCardNo || this.maskIdCard(idNumber.trim()),
              authTime: response.data?.authTime || new Date().toISOString(),
              status: response.data?.authStatus || 0,
              message: response.message || '实名认证信息已提交'
            }
          }
        };

        // 🔥 使用统一的storage工具类保存用户信息
        storage.saveUserInfo(updatedUserInfo);
        console.log('✅ 本地用户信息已更新');

        // 显示成功提示
        wx.showToast({
          title: response.message || '认证信息已提交',
          icon: 'success',
          duration: 2000
        });

        // 🔥 如果认证已通过，立即返回；否则延迟返回
        if (response.data?.verified === true) {
          console.log('🎉 实名认证已通过，立即返回');
          setTimeout(() => {
            wx.navigateBack();
          }, 1500);
        } else {
          console.log('📝 实名认证已提交，等待审核');
          setTimeout(() => {
            wx.navigateBack();
          }, 2000);
        }

      } else {
        console.error('❌ 实名认证失败:', response.message);
        wx.showToast({
          title: response.message || '认证提交失败',
          icon: 'none',
          duration: 2000
        });
      }

    } catch (error) {
      wx.hideLoading();
      console.error('💥 提交实名认证异常:', error);
      wx.showToast({
        title: error.message || '认证提交出现异常',
        icon: 'none',
        duration: 2000
      });
    } finally {
      this.setData({ isSubmitting: false });
    }
  },

  // 📝 身份证号脱敏处理
  maskIdCard(idCard) {
    if (!idCard || idCard.length < 18) return idCard;
    // 保留前4位和后4位，中间用*替换
    return idCard.substring(0, 4) + '**********' + idCard.substring(14);
  }
});

